{"version":3,"file":"vite-plugin.js","sources":["../src/vite-plugin.ts"],"sourcesContent":["// ─── actjs Vite plugin ────────────────────────────────────────────────────────\n// Reads actjs.deps.json at build time and:\n//   • Adds declared packages to Rollup's external list\n//   • Injects a <script type=\"importmap\"> into index.html\n//   • Injects <link rel=\"stylesheet\"> tags for known CSS packages\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { Plugin, HtmlTagDescriptor } from 'vite';\nimport type { ActDepsConfig } from './deps.js';\nimport { resolveUrl, resolveStylesheetUrl } from './deps.js';\n\n/**\n * Vite plugin that reads `actjs.deps.json` and wires up CDN package loading\n * at build time — import map injection, stylesheet links, and Rollup externals.\n *\n * @example\n * // vite.config.ts\n * import { actjsPlugin } from 'actjs/vite'\n * export default defineConfig({ plugins: [actjsPlugin()] })\n */\nexport function actjsPlugin(): Plugin {\n  let deps: ActDepsConfig | null = null;\n\n  return {\n    name: 'actjs',\n\n    configResolved(config) {\n      const depsPath = join(config.root, 'actjs.deps.json');\n      if (!existsSync(depsPath)) return;\n      try {\n        deps = JSON.parse(readFileSync(depsPath, 'utf-8')) as ActDepsConfig;\n      } catch {\n        config.logger.warn('[actjs] Could not parse actjs.deps.json — skipping CDN integration');\n      }\n    },\n\n    config() {\n      // Always wire up the JSX transform so `vite dev` works out of the box\n      // without requiring jsxImportSource in tsconfig or vite.config manually.\n      const base = {\n        esbuild: {\n          jsx: 'automatic' as const,\n          jsxImportSource: 'js-act',\n        },\n      };\n      if (!deps) return base;\n      // Externalize all declared packages so Rollup doesn't try to bundle them\n      return {\n        ...base,\n        build: {\n          rollupOptions: {\n            external: Object.keys(deps.packages),\n          },\n        },\n      };\n    },\n\n    transformIndexHtml(): HtmlTagDescriptor[] {\n      if (!deps) return [];\n      const { provider = 'esm.sh', packages } = deps;\n      const tags: HtmlTagDescriptor[] = [];\n      const importMap: Record<string, string> = {};\n\n      for (const [pkg, version] of Object.entries(packages)) {\n        importMap[pkg] = resolveUrl(pkg, version, provider);\n\n        const cssUrl = resolveStylesheetUrl(pkg, version);\n        if (cssUrl) {\n          tags.push({\n            tag: 'link',\n            attrs: { rel: 'stylesheet', href: cssUrl },\n            injectTo: 'head',\n          });\n        }\n      }\n\n      // Import map must be injected before any module scripts\n      tags.unshift({\n        tag: 'script',\n        attrs: { type: 'importmap' },\n        children: JSON.stringify({ imports: importMap }, null, 2),\n        injectTo: 'head-prepend',\n      });\n\n      return tags;\n    },\n  };\n}\n"],"names":["actjsPlugin","deps","config","depsPath","join","existsSync","readFileSync","e","base","provider","packages","tags","importMap","pkg","version","resolveUrl","cssUrl","resolveStylesheetUrl"],"mappings":";;;AAqBO,SAASA,IAAsB;AACpC,MAAIC,IAA6B;AAEjC,SAAO;AAAA,IACL,MAAM;AAAA,IAEN,eAAeC,GAAQ;AACrB,YAAMC,IAAWC,EAAKF,EAAO,MAAM,iBAAiB;AACpD,UAAKG,EAAWF,CAAQ;AACxB,YAAI;AACF,UAAAF,IAAO,KAAK,MAAMK,EAAaH,GAAU,OAAO,CAAC;AAAA,QACnD,SAAQI,GAAA;AACN,UAAAL,EAAO,OAAO,KAAK,oEAAoE;AAAA,QACzF;AAAA,IACF;AAAA,IAEA,SAAS;AAGP,YAAMM,IAAO;AAAA,QACX,SAAS;AAAA,UACP,KAAK;AAAA,UACL,iBAAiB;AAAA,QAAA;AAAA,MACnB;AAEF,aAAKP,IAEE;AAAA,QACL,GAAGO;AAAA,QACH,OAAO;AAAA,UACL,eAAe;AAAA,YACb,UAAU,OAAO,KAAKP,EAAK,QAAQ;AAAA,UAAA;AAAA,QACrC;AAAA,MACF,IARgBO;AAAA,IAUpB;AAAA,IAEA,qBAA0C;AACxC,UAAI,CAACP,EAAM,QAAO,CAAA;AAClB,YAAM,EAAE,UAAAQ,IAAW,UAAU,UAAAC,EAAA,IAAaT,GACpCU,IAA4B,CAAA,GAC5BC,IAAoC,CAAA;AAE1C,iBAAW,CAACC,GAAKC,CAAO,KAAK,OAAO,QAAQJ,CAAQ,GAAG;AACrD,QAAAE,EAAUC,CAAG,IAAIE,EAAWF,GAAKC,GAASL,CAAQ;AAElD,cAAMO,IAASC,EAAqBJ,GAAKC,CAAO;AAChD,QAAIE,KACFL,EAAK,KAAK;AAAA,UACR,KAAK;AAAA,UACL,OAAO,EAAE,KAAK,cAAc,MAAMK,EAAA;AAAA,UAClC,UAAU;AAAA,QAAA,CACX;AAAA,MAEL;AAGA,aAAAL,EAAK,QAAQ;AAAA,QACX,KAAK;AAAA,QACL,OAAO,EAAE,MAAM,YAAA;AAAA,QACf,UAAU,KAAK,UAAU,EAAE,SAASC,EAAA,GAAa,MAAM,CAAC;AAAA,QACxD,UAAU;AAAA,MAAA,CACX,GAEMD;AAAA,IACT;AAAA,EAAA;AAEJ;"}